// 包含必要的头文件
#include "rclcpp/rclcpp.hpp"          // ROS2的C++核心库
#include "std_msgs/msg/string.hpp"    // 字符串消息类型

// 创建Listener类，继承自rclcpp::Node
class Listener : public rclcpp::Node
{
public:
    // 构造函数
    Listener() : Node("listener_node")  // 节点名称为"listener_node"
    {
        // 创建订阅者，订阅"chat_topic"话题
        subscription_ = this->create_subscription<std_msgs::msg::String>(
            "chat_topic",                    // 话题名称
            10,                             // 队列大小
            std::bind(&Listener::topic_callback, this, std::placeholders::_1) // 回调函数
        );
        
        // 打印启动信息
        RCLCPP_INFO(this->get_logger(), "Listener节点启动成功，等待接收消息...");
    }

private:
    // 话题回调函数
    void topic_callback(const std_msgs::msg::String::SharedPtr msg)
    {
        // 打印接收到的消息
        RCLCPP_INFO(this->get_logger(), "接收到消息: '%s'", msg->data.c_str());
    }
    
    // 声明成员变量
    rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscription_;  // 订阅者
};

// 主函数
int main(int argc, char * argv[])
{
    // 初始化ROS2
    rclcpp::init(argc, argv);
    
    // 创建节点并保持运行
    auto node = std::make_shared<Listener>();
    rclcpp::spin(node);
    
    // 关闭ROS2
    rclcpp::shutdown();
    return 0;
}